#ifndef CHATDIALOG_H
#define CHATDIALOG_H

#include <QDialog>
#include <QWidget>
#include <QListWidget>
#include <QLabel>
#include <QTimer>
#include "addorcreatecontactdialog.h"
#include "addcontactform.h"
#include "switchkeydialog.h"//发送消息快捷键切换界面
#include "chatinputtextedit.h"//自定义聊天输入框
#include "global.h"
#include "chatlistitem.h"

namespace Ui {
class ChatDialog;
}

class ChatDialog : public QDialog
{
    Q_OBJECT

public:
    explicit ChatDialog(int id,QString name,QString email,QString identity,
               QString avatar);
    ~ChatDialog();

    //用户信息
    int user_id;
    QString user_name;
    QString user_email;
    QString user_identity;//身份令牌
    QString user_avatar;//头像图片名字，当图片加载出错时，用于向服务器请求再次加载


    void init_user(const QJsonArray& jsonfriendlist);//初始化用户信息
    void show_imageInfo();//完成所有资源请求后，将图片加载到界面

protected:
    void mousePressEvent(QMouseEvent *event) override;
    //void keyPressEvent(QKeyEvent *event) override;

public slots:
    void slot_loadChatItem(QJsonObject lastMsg,QString msgId,int newMesNums);//加载聊天模式下的qlistwidgetitem窗口
    void slot_recvMsg(QString msg);//接受消息
private slots:
    void showUndoBtn();//当点击搜索框使其获得焦点时，显示撤销按钮
    void hideUndoBtn();//当搜索框失去焦点时，隐藏撤销按钮
    void showScrollBar();//显示滚动栏
    void hideScrollBar();//隐藏滚动栏
    void createAddContactForm();//创建添加好友或群聊界面
    void toTheEmptyContactForm();//当AddContactForm销毁时发送信号，此槽接收并将其指针至空
    void keyEnterIsTrue();//启用enter快捷键发送消息
    void keyEnterIsFalse();//关闭enter快捷键发送消息

    void on_undo_btn_clicked();//搜索栏删除文本，即撤销按钮

    void on_add_or_create_contact_clicked();

    //发送消息/////////////////////////////////////////////////////////////////
    void on_send_mes_btn_clicked();

    void on_switch_key_rabtn_clicked(bool checked);

    void on_input_textEdit_textChanged();

    void on_radioButton_3_clicked();

    void slot_chat_mod_finish(ReqId id, QByteArray res, ErrorCodes err);//获取好友列表
    void on_chat_rabut_clicked(bool checked);

    void on_contact_rabut_clicked(bool checked);

    void on_contact_send_mes_clicked();//联系人模式下点击发送消息,在聊天窗口创建qlistwidgetitem

    //聊天窗口窗口点击item
    void on_chat_list_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
    //联系人窗口点击item
    void on_addressBook_list_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);

signals:
    void sendTextMsg(QString msg);//通知chatservice模块发送文本消息到服务器
    void sendImageMsg(QByteArray msg);//通知chatservice模块发送图片消息到服务器
private:
    Ui::ChatDialog *ui;
    AddOrCreateContactDialog* _add_or_create_dlg = nullptr;//添加好友/群聊或创建群聊按钮显示界面
    AddContactForm* _add_contact_dlg = nullptr;//添加好友/群聊界面
    SwitchKeyDialog* _switchkey_dlg = nullptr;//发送快捷键是否禁用按钮界面

    void init_ui();//初始化界面信息
    void showChatwidgetInContact(QLabel *lab);//联系人模式下，右侧显示聊天窗口
    void showContactwidget(QStringList friendInfo);//右侧显示联系人窗口
    void loadChatMessageTowidget(QString msgId,double score,QString friend_avatar);//加载十条消息到界面


    //在QLabel上显示图片
    void loadImage(QLabel* label,const QByteArray &pictureByteArray);

    QTimer *timer;//记录消息发送时间，消息发送间隔超过2分钟为新一组消息
    bool isNewGroupMsg = true;//是否为新组消息,默认为新


};

#endif // CHATDIALOG_H
